package com.lazi.june.web.version;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * desc: API 版本注解
 * <p>
 * 可加在方法或类上（方法优先级高于类）。
 * 版本值建议采用语义化版本，如：v1.0.0、1.2.0 等。
 *
 * 示例：
 * <pre>
 * {@code
 * @RestController
 * @ApiVersion("v1.0.0")
 * class UserController {
 *     @GetMapping("/user/{id}")
 *     public User get(@PathVariable Long id) { ... }
 *
 *     // 更高优先级，覆盖类上的版本
 *     @ApiVersion("v1.1.0")
 *     @GetMapping("/user/{id}")
 *     public User getV110(@PathVariable Long id) { ... }
 * }
 * }
 * </pre>
 *
 * @author huliqian
 * @since 2025/9/11
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiVersion {
    String value() default "v1.0.0";
}
